
# 异常和错误
"""
1. 代码运行逻辑
    （1）. 解析和编译 ： 在编写代码中启动之前首先会检查代码的语法和结构是否正确 ，若出现此类错误 ，直接报错，将不启动执行(错误)
    (2). 可以运行 ，在执行过程中发生了错误 ，也会报错 ，也会导致代码停止运行 。 比如 ：被0除 ，索引越界 、字典键错误 、数据类型错误。

2. 错误 ： 编写代码触发了硬性条件 ，一般编辑器会有红色的波浪线标识为error

3. 异常 ：在执行过程遇到的错误 ，python会抛出异常 ，比如被0除

4. 异常处理方式
try:
    可能出现错误的代码块
except:
    对错误处理的代码块
[finally]:
    代码
其它代码

5. 异常分类 ：通过对异常分类 ，可以更准确的知道异常的类型 ，从而提示更准确 。
BaseException：所有异常的基类，用于处理所有异常情况。
Exception：常规异常的基类，用于处理大多数异常情况。
TypeError：类型错误，例如对非数字对象进行数学运算。
ValueError：数值错误，例如将一个字符串作为数字进行数学运算。
IndexError：索引错误，例如使用超出序列长度的索引值。
KeyError：字典键错误，例如使用不存在的字典键。
AttributeError：属性错误，例如尝试访问一个对象不存在的属性。
IOError：输入/输出错误，例如读写文件时发生错误。
ValueErrorException：与具体编程相关的错误，例如传递错误的参数类型或参数值。
ZeroDivisionError：除零错误，例如执行除以零的操作。
FileNotFoundError ： 文件不存在错误 ，例如找不到文件
UnicodeDecodeError: 文件编码错误 ，读取编码格式不正确


6.finally ：在运行过程中 ，希望某段代码必须运行 ，就可以放在finally .
    (1). 特殊场景 ：关闭资源 。
"""

# print("hello world")
#
# def abc():
#     print(1/0)
#
# abc()
# print("hello python")

file_name = 'a.txt'
f = None
try:
    # 1. 打开文件
    f = open(file_name,encoding='utf-8')
    content = f.read()
    print("读取文件内容:{}".format(content))
except FileNotFoundError as e:
    print("文件不存在，请检查文件是否被删除:{}".format(e))
except IOError as e:
    print("文件读取错误，请检查:{}".format(e))

except UnicodeDecodeError as e:
    print("文件编码不正确，请检查:{}".format(e))
except Exception as e:
    print("未知错误:{}".format(e))
finally:
    if f:
        f.close()

